#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QSerialPort>        //提供访问串口的功能
#include <QSerialPortInfo>    //提供系统中存在的串口的信息
#include "QTimerEvent"
#include  "QTimer"
#include "QPushButton"
#include "QThread"
#include "QFile"
#include "QFileDialog"
#include "mytool.h"
#include "QTextBrowser"
#include "QCryptographicHash"
#include "QMenu"
#include "QMenuBar"
#include <QAction>
#include <QMessageBox>
#include <QToolBar>


namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow(); 
public:
    QSerialPort serial; //创建一个串口对象 
    QTimer TIME1;     //创建一个定时器中断
    QTimer TIME2;     //创建一个定时器1中断
    uint16_t   time2_sertal_cnt;
    long timeout=0;
    long serial_date_cnt=0;
    QByteArray  serial_RX_BUFF; //用于存储串口接收到的数据
    QByteArray file_datebuff;   //用于存储，bin文件读取到的数据。
    unsigned int file_data_readIndex;
    unsigned int file_data_Size;
    uint16_t file_pack_mod=0;  //包的模
    uint16_t file_pack_rem =0; //包的余数
    uint16_t file_pack_num =0; //总包数
    uint8_t OTA_Pack_Send_Mode =0; //0:正常模式下发 1:补包模式下发包
    QByteArray  pack_rx_state; //接收的状态 保存为成功接收包的
    QByteArray MD5_BUF;
    char  Ota_updata_step=0; //升级步骤


protected:
    //void timerEvent(QTimerEvent*event);

private slots:

    void serial_slots_IRQHandler(void);

    void timer_slots_IRQHandler(void);

    void timer2_slots_IRQHandler(void);

//  以下槽函数自动生成

    void on_uart_button_clicked();

    void on_com_Box_currentIndexChanged(int index);

    void on_band_Box_currentIndexChanged(int index);

    void on_checkBit_Box_currentIndexChanged(int index);

    void on_dataBit_Box_currentIndexChanged(int index);

    void on_stopBit_Box_currentIndexChanged(int index);

    void on_file_down_clicked(void);

    void on_file_send_boutton_clicked(void);

    void on_actioninformation_triggered(void);

    void on_getMCUVersion_clicked(void);

    void on_ClearLog_clicked();

private:
    Ui::MainWindow *ui;
    QAction *openAction;
    void app_uart_init(void);
    void signal_serial_data_handler(void);  //
    void parInit(void); //参数初始化

//定义一个槽函数    

signals:
    void pack_Send(void);
    void send_signals_serial_data_handle(void);


};


#endif // MAINWINDOW_H
